package com.hifar.sso.service;

import com.hifar.sso.model.SSOToken;

/**
 * SSO令牌服务接口
 * 
 * @author system
 * @since 1.0.0
 */
public interface SSOTokenService {
    
    /**
     * 存储令牌
     * 
     * @param token 令牌信息
     */
    void storeToken(SSOToken token);
    
    /**
     * 通过访问令牌获取令牌信息
     * 
     * @param accessToken 访问令牌
     * @return 令牌信息
     */
    SSOToken getTokenByAccessToken(String accessToken);
    
    /**
     * 通过刷新令牌获取令牌信息
     * 
     * @param refreshToken 刷新令牌
     * @return 令牌信息
     */
    SSOToken getTokenByRefreshToken(String refreshToken);
    
    /**
     * 存储授权码
     * 
     * @param code 授权码
     * @param username 用户名
     * @param clientId 客户端ID
     * @param redirectUri 重定向URI
     * @param scope 作用域
     */
    void storeAuthorizationCode(String code, String username, String clientId, String redirectUri, String scope);
    
    /**
     * 获取授权码信息
     * 
     * @param code 授权码
     * @return 令牌信息
     */
    SSOToken getAuthorizationCode(String code);
    
    /**
     * 更新令牌
     * 
     * @param token 令牌信息
     */
    void updateToken(SSOToken token);
    
    /**
     * 撤销令牌
     * 
     * @param accessToken 访问令牌
     * @return 是否成功
     */
    boolean revokeToken(String accessToken);
    
    /**
     * 撤销用户所有令牌
     * 
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean revokeUserTokens(String userId);
    
    /**
     * 清理过期令牌
     * 
     * @return 清理数量
     */
    int cleanExpiredTokens();
}
